﻿@page "/clients/{id}/{action}"
@using SimpleIdServer.IdServer.Website.Resources;
@using SimpleIdServer.IdServer.Website.Stores.ClientStore;
@using SimpleIdServer.IdServer.Website.Stores.RealmStore;
@using SimpleIdServer.IdServer.Website.Stores.UserStore;
@inherits Fluxor.Blazor.Web.Components.FluxorLayout
@inject NotificationService notificationService
@inject NavigationManager navigationManager
@layout MainLayout
@inject IState<ClientState> clientState
@inject IDispatcher dispatcher

<RadzenBreadCrumb>
    <RadzenBreadCrumbItem Path="/clients" Text="@Global.ClientsTitle" />
    <RadzenBreadCrumbItem Text="@Global.ClientDetailsTitle" />
</RadzenBreadCrumb>

<RadzenText class="mt-3 mb-3 no-margin" Text="@clientState.Value.Client.ClientId" TextStyle="TextStyle.DisplayH3" />

<div class="mb-1">
    <RadzenBadge Text="@clientState.Value.Client.ClientType" IsPill="true" />
</div>

<RadzenCardLoader Variant="Variant.Filled" IsLoading=@clientState.Value.IsLoading>
    <RadzenTabs Change=@OnChange @bind-SelectedIndex="selectedIndex">
        <Tabs>
            <RadzenTabsItem Text="@Global.Details">
                <ClientSettings Client="@clientState.Value.Client"></ClientSettings>
            </RadzenTabsItem>
            <RadzenTabsItem Text="@Global.ClientScopes">
                <ClientScopes Client="@clientState.Value.Client"></ClientScopes>
            </RadzenTabsItem>
            <RadzenTabsItem Text="@Global.Keys">
                <ClientKeys Client="@clientState.Value.Client"></ClientKeys>
            </RadzenTabsItem>
            <RadzenTabsItem Text="@Global.Credentials">
                <ClientCredentials Client="@clientState.Value.Client"></ClientCredentials>
            </RadzenTabsItem>
            <RadzenTabsItem Text="@Global.Roles">
                <ClientRoles Client="@clientState.Value.Client"></ClientRoles>
            </RadzenTabsItem>
            <RadzenTabsItem Text="@Global.Advanced">
                <ClientAdvanced Client="@clientState.Value.Client"></ClientAdvanced>
            </RadzenTabsItem>
        </Tabs>
    </RadzenTabs>
</RadzenCardLoader>

@code {
    Dictionary<string, int> mappingActionNameToIndex = new Dictionary<string, int>
    {
        { "settings", 0 },
        { "scopes", 1 },
        { "keys", 2 },
        { "credentials", 3 },
        { "roles", 4 },
        { "advanced", 5 }
    };

    [Parameter]
    public string id { get; set; } = null!;

    [Parameter]
    public string? action { get; set; } = null;

    int selectedIndex = 0;

    protected override void OnAfterRender(bool firstRender)
    {
        base.OnAfterRender(firstRender);
        if(firstRender)
        {
            SubscribeToAction<SelectRealmSuccessAction>((act) =>
            {
                navigationManager.NavigateTo("/clients");
            });
        }
    }

    protected override void OnParametersSet()
    {
        base.OnParametersSet();
        if (string.IsNullOrWhiteSpace(id)) return;
        if (!string.IsNullOrWhiteSpace(action) && mappingActionNameToIndex.ContainsKey(action))
            selectedIndex = mappingActionNameToIndex[action];
        SubscribeToAction<GetClientFailureAction>((act) =>
        {
            notificationService.Notify(new NotificationMessage { Severity = NotificationSeverity.Error, Summary = act.ErrorMessage });
            StateHasChanged();
        });
        dispatcher.Dispatch(new GetClientAction { ClientId = id });
    }

    void OnChange(int index)
    {
        var rec = mappingActionNameToIndex.Single(kvp => kvp.Value == index);
        navigationManager.NavigateTo($"/clients/{id}/{rec.Key}");
    }
}